package com.qqtech.qquan.push.service;

import java.util.List;

import com.qqtech.core.common.enums.YesNoEnum;
import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.order.enums.OrderBaseDeliveryStatusSignTypeDictEnum;
import com.qqtech.qquan.order.enums.OrderBaseOrderStatusCancelTypeDictEnum;
import com.qqtech.qquan.order.enums.OrderBaseReturnStatusCompleteTypeDictEnum;
import com.qqtech.qquan.order.enums.ReturnPayStatusAgreeTypeEnum;
import com.qqtech.qquan.pub.enums.PubPlatformEnum;
import com.qqtech.qquan.push.model.PushLog;

public interface PushBizzService extends BaseService<PushLog> {

	/**
	 * 新友事更新(给发布人的朋友推送)
	 * 
	 * @param userId
	 *            发布友事的用户id
	 */
	void pubUserTopic(Integer userId);

	/**
	 * 新评论
	 * 
	 * @param userId
	 *            评论人id
	 * @param beUserId
	 *            被评论人id
	 * @param commentId
	 *            这条评论的id
	 */
	void pubComment(Integer userId, Integer beUserId, Integer commentId);

	/**
	 * 回复评论
	 * 
	 * @param userId
	 *            回复人
	 * @param beUserId
	 *            被回复人
	 * @param commentId
	 *            这条回复的id
	 */
	void reply2Comment(Integer userId, Integer beUserId, Integer commentId);

	/**
	 * 新点赞
	 * 
	 * @param userId
	 *            点赞人id
	 * @param beUserId
	 *            被点赞人id
	 */
	void pubPraise(Integer userId, Integer beUserId);

	/**
	 * 订单签收
	 * 
	 * @param orderNo
	 *            订单号
	 */
	void orderSigned(String orderNo, OrderBaseDeliveryStatusSignTypeDictEnum orderBaseDeliveryStatusSignType);

	/**
	 * 订单发货
	 * 
	 * @param orderNo
	 *            订单号
	 */
	void orderSent(String orderNo);

	/**
	 * 订单支付
	 * 
	 * @param orderNo
	 *            订单号
	 */
	void orderPayed(String orderNo);

	/**
	 * 买家下单
	 * 
	 * @param orderNo
	 *            订单号
	 */
	void orderSelected(String orderNo);

	/**
	 * app升级-针对特定客户端id
	 * 
	 * @param registrationIds
	 *            客户端推送的设备id集合
	 * @param overrideMsgId
	 *            需要覆盖的推送id(无则输入""或空对象)
	 */
	void upgradeByRegistrationIds(List<String> registrationIds, String overrideMsgId);

	/**
	 * app升级-全部更新
	 */
	void upgradeAll();

	/**
	 * 取消订单
	 * 
	 * @param orderNo
	 */
	void orderCancel(String orderNo, OrderBaseOrderStatusCancelTypeDictEnum orderBaseOrderStatusCancelType);

	/**
	 * 卖家取消订单
	 * 
	 * @param orderNo
	 */
	void sellerCancel(String orderNo);

	/**
	 * 卖家同意退货
	 * 
	 * @param orderNo
	 */
	void returned(String orderNo, OrderBaseReturnStatusCompleteTypeDictEnum orderBaseReturnStatusCompleteType);

	/**
	 * 买家申请退货
	 * 
	 * @param orderNo
	 */
	void applyReturn(String orderNo);

	/**
	 * 申请加为好友，被加好友的用户会收到推送信息
	 * 
	 * @param friendId
	 *            被加好友的id
	 */
	void applyFriend(Integer friendId);

	/**
	 * 当用户APP退到后台时，则当有IM消息时就使用推送通知对方
	 * 
	 * @param toUserId
	 */
	public void imNotifyWhenUserBg(Integer toUserId);

	/**
	 * 同一账户在另一设备登录时则之前的设备要下线
	 * 
	 * @param userId
	 *            对应的用户
	 * @param registrationId
	 *            前一个设备的推送id
	 */
	public void userOffWhenLoginOtherDevice(Integer userId, String registrationId);

	/**
	 * 身份认证信息的推送通知
	 * 
	 * @param userId
	 *            被认证人的id
	 * @param yesNo
	 *            是否通过
	 */
	public void realAuth(Integer userId, YesNoEnum yesNo);

	/**
	 * 社区住户的认证结果推送通知
	 * 
	 * @param userId
	 *            被认证人的id
	 * @param yesNo
	 *            是否通过
	 */
	public void communityAuth(Integer userId, YesNoEnum yesNo);

	/**
	 * 推送更新原生版本
	 * 
	 * @param pubPlatformEnum
	 *            推送客户端类型
	 */
	public void upgradeNative(PubPlatformEnum pubPlatformEnum);

	/**
	 * 推送增量更新
	 */
	public void upgradeByVersion();

	/**
	 * 当被邀请加入圈子时，则推送通知给被邀请人
	 * 
	 * @param beInvitedId
	 *            被邀请人id
	 * @param circleName
	 *            圈子名称
	 */
	public void beInvitedCircle(Integer beInvitedId, String circleName);

	/**
	 * 有新配送单时推送给配送方
	 * 
	 * @param orderNo
	 */
	public void sendOrderWhenPayed(String orderNo);

	/**
	 * 用户申请退款
	 * 
	 * @param orderNo
	 */
	public void applyReturnPay(String orderNo);

	/**
	 * 卖家或圈圈同意退款
	 * 
	 * @param orderNo
	 * @param returnPayStatusAgreeTypeEnum
	 */
	public void returnPayed(String orderNo, ReturnPayStatusAgreeTypeEnum returnPayStatusAgreeTypeEnum);

	/**
	 * 卖家拒绝退款
	 * 
	 * @param orderNo
	 */
	public void refuseReturnPay(String orderNo);

	/**
	 * 有人申请加入你的圈子
	 * 
	 * @param beApplyedId
	 * @param circleName
	 */
	void beApplyedCircle(Integer beApplyedId, String circleName);

	/**
	 * 圈圈荣誉系统通知
	 * 
	 * @param userId
	 *            被通知人的id
	 * @param msg
	 *            通知内容
	 */
	void honorNotice(Integer userId, String msg);

	/**
	 * 后台推送接口
	 * 
	 * @param title
	 *            必填，推送标题
	 * @param msg
	 *            必填，推送内容
	 * @param url
	 *            非必填，点击app推送信息时的调整目标地址
	 * @param communityId
	 *            非必填，推送的社区范围(空则为所有社区)
	 */
	void adminNotice(String title, String msg, String url, Integer communityId);

	/**
	 * 优惠卷发送系统通知
	 *
	 * @param userIds
	 *            被通知人的id
	 * @param msg
	 *            通知内容
	 */
	void couponNotice(List<Integer> userIds, String msg);

	/**
	 * 后台推送接口
	 *
	 * @param title
	 *            必填，推送标题
	 * @param msg
	 *            必填，推送内容
	 * @param url
	 *            非必填，点击app推送信息时的调整目标地址
	 * @param communityId
	 *            非必填，推送的社区范围(空则为所有社区)
	 */
	void shopNotice(String title, String msg, String url, Integer shopId, Integer communityId);

	/**
	 * 圈子活动送系统通知
	 *
	 * @param userIds
	 *            被通知人的id
	 * @param msg
	 *            通知内容
	 */
	void circleActivityNotice(List<Integer> userIds, Integer activityId, String msg);

}